//
// shared board
// 
// @author krdlab
//


// comet client を Shard の要件に応じて拡張
//
// spec:
//    construction 引数が格納されたハッシュ (省略可)
//      end_point: 接続先 URI (省略した場合は '/shard' となる)
//
var create_shard = function(spec) {
  spec = spec || {};
  // 必須
  spec.end_point = spec.end_point || '/shard';

  // superior
  var that = create_comet_client(spec);
  if (!that) {
    throw new_error(
        "failed create comet_client! (function=create_shard)");
  }

  // Shard 固有
  spec.board_index  = spec.board_index || 0;
  spec.draw_version = spec.draw_version || 0;
  spec.received_svg = false;

  //
  // public ----

  // 受信した SVG データかどうかを示す
  that.is_received_svg = function() {
    return spec.received_svg;
  };

  // SVG を受信したときに呼び出されるハンドラ
  that.on_received_svg = function(svg) {};

  // override WAIT
  that.on_wait_success  = function(req) {
    spec.received_svg = true;
    var obj = req.responseData;
    that.on_received_svg(obj.svg);
    spec.received_svg = false;
  };
  that.on_wait_complete = function(req) {
    // TODO 終了信号がきたら呼ばない
    that.wait_response();
  };

  // SVG を wrap して POST する
  that.post_svg = function(svg) {
    var obj = {
        version: spec.draw_version,
        svg:     svg
    };
    that.post_data(obj);
    spec.draw_version = spec.draw_version + 1;  // とりあえず
  };

  return that;
};

